// uniapp官网推出的uni.addInterceptor（）拦截器   https://uniapp.dcloud.net.cn/api/interceptor.html#addinterceptor
// 注意:如果你想一进来就只能去到登录页的话，应用启动页是小程序框架直接加载的，不属于任何路由跳转 API 的调用，所以监听不到，需要将pages.json的第一项为登录页
// 在微信小程序端点击tabbar的底层逻辑并不是触发uni.switchTab。所以误认为拦截无效，此类场景的解决方案是在tabbar页面的页面生命周期onShow中处理
// 页面白名单，不受拦截
const whiteList = [
	// '/pages/index/index',
	// '/pages/class/class',
	// '/pages/release/release',
	// '/pages/mine/mine'
]

function hasPermission(url) {
	// token是登录成功后在本地存储登录标识，存储一个能够判断用户登录的唯一标识就行，根据自己存储的数据类型来判断
	let userInfo = uni.getStorageSync('user')
	let token = null
	if (userInfo) {
		userInfo = JSON.parse(userInfo)
		if (userInfo.token) {
			token = userInfo.token
		}
	}
	console.log('token', token);

	// 在白名单中或有登录判断条件可以直接跳转
	if (whiteList.indexOf(url) !== -1 || token) {
		console.log('跳转的页面在白名单内或是已登录')
		return true
	}
	console.log('跳转的页面不在白名单内且未登录')
	return false
}
uni.addInterceptor('navigateTo', {
	// 页面跳转前进行拦截, invoke根据返回值进行判断是否继续执行跳转
	invoke(e) {
		if (!hasPermission(e.url)) {
			console.log(e.url);
			uni.reLaunch({
				url: '/pages/login/index'
			})
			return false
		}
		return true
	},
	success(e) {

	}
})
uni.addInterceptor('switchTab', {
	// tabbar页面跳转前进行拦截
	invoke(e) {
		if (!hasPermission(e.url)) {
			uni.reLaunch({
				url: '/pages/login/index'
			})
			console.log('跳转的页面在白名单内或是已登录')
			return false
		}
		console.log('跳转的页面不在白名单内且未登录')
		return true
	},
	success(e) {

	}
})

// 应用初始化检查
export function checkInitialPage() {
	// token是登录成功后在本地存储登录标识，存储一个能够判断用户登录的唯一标识就行，根据自己存储的数据类型来判断
	let userInfo = uni.getStorageSync('user')
	let token = null
	if (userInfo) {
		userInfo = JSON.parse(userInfo)
		if (userInfo.token) {
			token = userInfo.token
		}
	}
	if (!token) {
		// 使用 setTimeout 避免冲突
		setTimeout(() => {
			uni.reLaunch({
				url: '/pages/login/index'
			})
		}, 0)
	}else{
		uni.reLaunch({
			url: '/'
		})
	}
}